//package com.yh.common.aspect;
//
//import org.springframework.stereotype.Component;
//
//import cn.hutool.http.HttpUtil;
//import com.google.gson.Gson;
//import lombok.extern.slf4j.Slf4j;
//import org.aspectj.lang.JoinPoint;
//import org.aspectj.lang.ProceedingJoinPoint;
//import org.aspectj.lang.annotation.*;
//import org.springframework.stereotype.Component;
//import org.springframework.web.context.request.RequestAttributes;
//import org.springframework.web.context.request.RequestContextHolder;
//import org.springframework.web.context.request.ServletRequestAttributes;
//
//import javax.servlet.http.HttpServletRequest;
//import java.text.SimpleDateFormat;
//import java.util.Arrays;
//import java.util.HashMap;
//import java.util.Map;
//
///**
// * web层日志切面
// * Created by skh on 2017/12/22
// */
//@Component
//@Aspect
//@Slf4j
//public class LogAspect {
//
//	private String requestPath = null; // 请求地址
//	private Map<?, ?> inputParamMap = null; // 传入参数
//	private String inputParamString = null; // 传入参数
//	private Map<String, Object> outputParamMap = null; // 存放输出结果
//	private long startTimeMillis = 0; // 开始时间
//	private long endTimeMillis = 0; // 结束时间
//	private String method = null; //请求方式
//	private String methodName = null; //请求方法名称
//	private String remoteAddr = null; //请求Ip
//
//
////	@Pointcut("@annotation(io.swagger.annotations.ApiOperation)")
////	public void log() {
//////
////	}
//
//	@Pointcut("execution(* com.yh.modules.*.controller.*.*(..))")
//	public void log() {
//
//	}
//
//	/**
//	 * @param joinPoint
//	 * @Description: 方法调用前触发
//	 * 记录开始时间
//	 */
//	@Before("log()")
//	public void doBeforeInServiceLayer(JoinPoint joinPoint) {
//		startTimeMillis = System.currentTimeMillis(); // 记录方法开始执行的时间
//	}
//
//	/**
//	 * @param joinPoint
//	 * @Description: 方法调用后触发
//	 * 记录结束时间
//	 */
//	@After("log()")
//	public void doAfterInServiceLayer(JoinPoint joinPoint) {
//		endTimeMillis = System.currentTimeMillis(); // 记录方法执行完成的时间
//		this.printOptLog();
//	}
//
//	/**
//	 * @return
//	 * @throws Throwable
//	 * @Description: 环绕触发
//	 */
//	@Around("log()")
//	public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
//
//
//
//		//获取request信息
//		RequestAttributes ra = RequestContextHolder.getRequestAttributes();
//		ServletRequestAttributes sra = (ServletRequestAttributes) ra;
//		HttpServletRequest request = sra.getRequest();
//
//		// 获取输入参数
//		inputParamString = Arrays.toString(pjp.getArgs());
//		inputParamMap = request.getParameterMap();
//
//		// 获取请求地址
////		requestPath = request.getRequestURI();
//		requestPath = request.getRequestURL().toString();
//
//		// 获取请求方式
//		method = request.getMethod();
//
//		// 获取请求方法
//		methodName = pjp.getSignature().getName();
//
//		// 获取ip返回结果
//		remoteAddr = HttpUtil.getClientIP(request);
//
//		// 执行完方法的返回值：调用proceed()方法，就会触发切入点方法执行
//		outputParamMap = new HashMap<>();
//		Object result = pjp.proceed();// result的值就是被拦截方法的返回值
//		outputParamMap.put("result", result);
//
//		return result;
//	}
//
//	/**
//	 * 输出日志
//	 */
//	private void printOptLog() {
//		Gson gson = new Gson();
//		String optTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(startTimeMillis);
//		log.debug("");
//		log.debug("请求地址:{}", requestPath);
//		log.debug("请求Ip:{}", remoteAddr);
//		log.debug("请求方式:{}", method);
//		log.debug("请求方法名称:{}", methodName);
//		log.debug("开始时间: {}, 耗时:{}ms", optTime, (endTimeMillis - startTimeMillis));
//		log.debug("表单请求参数: {}", gson.toJson(inputParamMap));
//		log.debug("Body请求参数: {}", inputParamString);
//		log.debug("返回结果: {}", gson.toJson(outputParamMap));
//	}
//}
